Add network.destroy() to XenAPI
authorTom Wilkie <tom.wilkie@gmail.com>
Thu, 26 Apr 2007 14:39:30 +0000 (15:39 +0100)
committerTom Wilkie <tom.wilkie@gmail.com>
Thu, 26 Apr 2007 14:39:30 +0000 (15:39 +0100)
signed-off-by: Tom Wilkie <tom.wilkie@gmail.com>

tools/python/xen/xend/XendBase.py
tools/python/xen/xend/XendError.py
tools/python/xen/xend/XendNetwork.py
tools/python/xen/xm/messages/en/xen-xm.po

index 7cd87881850be6bb0ba0d4a200027bba32d2895b..73226f990e2f9bf9269e2be0b0317ed1aec5cf1d 100644 (file)
@@ -90,6 +90,9 @@ class XendBase:
         # Finally register it
         XendAPIStore.register(uuid, self.getClass(), self)
 
+    def destroy(self):
+        XendAPIStore.deregister(self.get_uuid(), self.getClass())
+
     def get_uuid(self):
         return self.__uuid
 
index e676d0d7fe27cc5df5d3625b771f41c2589a97f2..02bab6a2ee9f660027a7c644e53fecca9b433d14 100644 (file)
@@ -162,6 +162,18 @@ class VLANTagInvalid(XendAPIError):
 
     def __str__(self):
         return 'VLAN_TAG_INVALID: %s' % self.vlan
+
+class NetworkError(XendAPIError):
+    def __init__(self, error, network):
+        XendAPIError.__init__(self)
+        self.network = network
+        self.error = error
+
+    def get_api_error(self):
+        return ['NETWORK_ERROR', self.error, self.network]
+
+    def __str__(self):
+        return 'NETWORK_ERROR: %s %s' % (self.error, self.network)
     
 XEND_ERROR_AUTHENTICATION_FAILED = ('ELUSER', 'Authentication Failed')
 XEND_ERROR_SESSION_INVALID       = ('EPERMDENIED', 'Session Invalid')
index 96c4ddc2472475b7900b15f55b8b758d5f11572d..1858fbfbb0d881c4be777293510ab3ce25a29bfe 100644 (file)
@@ -60,7 +60,8 @@ class XendNetwork(XendBase):
 
     def getMethods(self):
         methods = ['add_to_other_config',
-                   'remove_from_other_config']
+                   'remove_from_other_config',
+                   'destroy']
         return XendBase.getMethods() + methods
 
     def getFuncs(self):
@@ -128,6 +129,8 @@ class XendNetwork(XendBase):
         # Create the bridge
         Brctl.bridge_create(network.name_label)
 
+        XendNode.instance().save_networks()
+
         return uuid
 
     create_phy  = classmethod(create_phy)
@@ -141,6 +144,20 @@ class XendNetwork(XendBase):
     # XenAPI Mehtods
     #
 
+    def destroy(self):
+        # check no VIFs or PIFs attached
+        if len(self.get_VIFs()) > 0:
+            raise NetworkError("Cannot destroy network with VIFs attached",
+                               self.get_name_label())
+
+        if len(self.get_PIFs()) > 0:
+            raise NetworkError("Cannot destroy network with PIFs attached",
+                               self.get_name_label())        
+        
+        XendBase.destroy(self)
+        Brctl.bridge_del(self.get_name_label())
+        XendNode.instance().save_networks()
+
     def get_name_label(self):
         return self.name_label
 
index 8db4aa6f1ec6f94927344aca0163fd0c424010aa..ad4d31f91aa8eacf4eceb55dd4f0ce0f4203ebdd 100644 (file)
@@ -87,4 +87,7 @@ msgid "IMPLEMENTATION_ERROR"
 msgstr "Class %s does not implement %s"
 
 msgid "VLAN_TAG_INVALID"
-msgstr "VLAN tag invalid %s"
\ No newline at end of file
+msgstr "VLAN tag invalid %s"
+
+msgid "NETWORK_ERROR"
+msgstr "Network Error: %s - %s"
\ No newline at end of file